package com.tsy.server.wayline.service;

import com.tsy.server.wayline.model.dto.ConditionalWaylineJobKey;
import com.tsy.server.wayline.model.dto.WaylineJobDTO;
import com.tsy.server.wayline.model.param.CreateJobParam;
import com.tsy.server.wayline.model.param.UpdateJobParam;
import com.dji.sdk.common.HttpResultResponse;

import java.sql.SQLException;
import java.util.Collection;
import java.util.List;

/**
 * @author sean
 * @version 1.1
 * @date 2022/6/9
 */
public interface IFlightTaskService {


    /**
     * 下发航线任务至机场。
     * @param param 任务创建参数
     * @param projectId 项目ID
     * @return
     */
    HttpResultResponse publishFlightTask(CreateJobParam param, Long projectId) throws SQLException;

    /**
     * 下发航线任务至机场。
     * @param waylineJob 航线任务对象
     * @return
     * @throws SQLException
     */
    HttpResultResponse publishOneFlightTask(WaylineJobDTO waylineJob) throws SQLException;

    /**
     * 立即执行任务。
     * @param jobId 任务ID
     * @return
     */
    Boolean executeFlightTask(String workspaceId, String jobId);

    /**
     * 根据任务ID集合取消任务。
     * @param workspaceId 工作空间ID
     * @param jobIds 任务ID集合
     */
    void cancelFlightTask(String workspaceId, Collection<String> jobIds);

    /**
     * 取消已下发但尚未执行的机场任务。
     * @param workspaceId 工作空间ID
     * @param dockSn 机场序列号
     * @param jobIds 任务ID集合
     */
    void publishCancelTask(String workspaceId, String dockSn, List<String> jobIds);

    /**
     * 将该任务的媒体文件设置为立即上传。
     * @param workspaceId 工作空间ID
     * @param jobId 任务ID
     */
    void uploadMediaHighestPriority(String workspaceId, String jobId);

    /**
     * 手动控制航线任务的执行状态。
     * @param workspaceId 工作空间ID
     * @param jobId 任务ID
     * @param param 操作参数
     */
    void updateJobStatus(String workspaceId, String jobId, UpdateJobParam param);

    void retryPrepareJob(ConditionalWaylineJobKey jobKey, WaylineJobDTO waylineJob);
}
